sequenceDiagram
    participant Initiator
    participant StreamClient_I
    participant Stream_R_I
    participant Stream_I_R
    participant StreamClient_R
    participant echoer
    participant Responder

    rect rgba(255, 0, 0, 0.1)
        Note over Initiator, StreamClient_I: Subscribe Initiator

        Initiator-->>StreamClient_I: create
        StreamClient_I--)Stream_R_I: pull
        StreamClient_I-->>Initiator: ok
    end

    loop
        Stream_R_I--)StreamClient_I: pull_response[]
        StreamClient_I--)Stream_R_I: pull
    end

    Initiator->>StreamClient_I: route[message]
    StreamClient_I--)Stream_I_R: push[stream_message]

    rect rgba(255, 0, 0, 0.1)
        Note over Responder, StreamClient_R: Subscribe Responder
        Responder-->>echoer: create
        Responder-->>StreamClient_R: create
        StreamClient_R--)Stream_I_R: pull
        StreamClient_R-->>Responder: ok
    end

    loop
        Stream_I_R--)StreamClient_R: pull_response[]
        StreamClient_R--)Stream_I_R: pull
    end

    Stream_I_R--)StreamClient_R: pull_response[stream_message]
    StreamClient_R->>echoer: route[message]
    echoer->>StreamClient_R: route[message]
    StreamClient_R--)Stream_R_I: push[stream_message]
    Stream_R_I--)StreamClient_I: pull_response[stream_message]
    StreamClient_I->>Initiator: route[message]
